﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucQuanlynhomnguoidung : System.Web.UI.UserControl
{
    private List<NguoidungEntity> glbLstGrvDatasource = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napDDL();
            napGrvNguoidung(true);
        }
    }

/* Nạp ddl */
    public void napDDL()
    {
        //-- giới tính
        ListItem nu = new ListItem("Nữ", "0");
        ListItem nam = new ListItem("Nam", "1");
        ddlGioitinh.Items.Add(nu);
        ddlGioitinh.Items.Add(nam);
        //-- ngày tháng
        for (int i = 1; i <= 31; i++)
        {
            ListItem ngay = new ListItem(i + "", i + "");
            ddlNgay.Items.Add(ngay);
        }
        for (int i = 1; i <= 12; i++)
        {
            ListItem thang = new ListItem(i+"",i+"");
            ddlThang.Items.Add(thang);
        }
        for (int i = DateTime.Now.Year; i>=1900; i--)
        {
            ListItem nam1 = new ListItem(i + "", i + "");
            ddlNam.Items.Add(nam1);
        }
        
    }
    /*
     *Hàm nạp gridview nhóm người dùng
     *Tham số: bLoadFromDB: cho biết có load lại từ CSDL không
     */
    public void napGrvNguoidung(bool bLoadFromDB)
    {
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = NguoidungBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        else
        {
            grvNguoidung.DataSource = glbLstGrvDatasource;
            grvNguoidung.DataKeyNames = new string[] { "PK_iNguoidungID" };
            grvNguoidung.DataBind();
        }
    }

    /*
     * Hàm reset để xóa trắng form nhâp thông tin
     */
    public void resetForm()
    {
        txtTendangnhap.Text = "";
        txtMatkhau.Text = "";
        txtNhaplaiMK.Text = "";
        txtNhaplaiEmail.Text = "";
        txtDiachi.Text = "";
        txtEmail.Text = "";
        txtGhichu.Text = "";
        divThongbao.InnerHtml = "";

    }
    /*
     * Hàm nạp dữ liệu cho form theo ID truyền vào
     * Tham số: truyền vào ID
     * Thực hiện: Lấy thông tin đối tượng theo ID và nạp vào form
     */
    public void napForm(short iPK_ID)
    {
        NguoidungEntity oNguoidung = NguoidungBRL.GetOne(iPK_ID);
        if (oNguoidung != null)
        {
            txtTendangnhap.Text = oNguoidung.sTendangnhap;
            //txtMatkhau.Text = oNguoidung.sMatkhau;
            txtEmail.Text = oNguoidung.sEmail;
            txtHoten.Text = oNguoidung.sHoten;
            txtSodienthoai.Text = oNguoidung.sSodienthoai;
            ddlNgay.SelectedIndex = oNguoidung.dNgaysinh.Day-1;
            ddlThang.SelectedIndex = oNguoidung.dNgaysinh.Month-1;
            ddlNam.SelectedIndex = DateTime.Now.Year-oNguoidung.dNgaysinh.Year;
            if (oNguoidung.bGioitinh == false)
                ddlGioitinh.SelectedIndex = 0;
            else
                ddlGioitinh.SelectedIndex = 1;
            txtDiachi.Text = oNguoidung.sDiachi;
            txtGhichu.Text = oNguoidung.sGhichu;
            divThongbao.InnerHtml = "";
        }
    }
    protected void grvNguoidung_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvNguoidung.PageIndex = e.NewPageIndex;
        napGrvNguoidung(false);
    }
    protected void grvNguoidung_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        int iIndex;
        short iPK_ID;
        iIndex = Convert.ToInt32(e.CommandArgument);
        GridViewRow row = grvNguoidung.Rows[iIndex];
        iPK_ID = short.Parse(row.Cells[1].Text);
        if (e.CommandName == "Sua")
        {
            btnOK.CommandName = "Edit";
            btnOK.Text = "<span>Sửa<span>";
            btnOK.CommandArgument = iPK_ID.ToString();
            btnOK.CausesValidation = false;
            panEdit.Visible = true;
            lblMatkhau.Visible = false;
            txtMatkhau.Visible = false;
            lblNhaplaiMK.Visible = false;
            txtNhaplaiMK.Visible = false;

            lblNhaplaiEmail.Visible = false;
            txtNhaplaiEmail.Visible = false;

            txtEmail.Enabled = false;
            napForm(iPK_ID);
        }
        else
            if (e.CommandName == "Xoa")
            {
                /*
                 * Thực hiện tác vụ xóa
                 * Phải đảm bảo xóa được trong Database và xóa trong danh sách.
                 * Nhưng không phải load lại từ database để hiển thị
                 */
                NguoidungBRL.Remove(iPK_ID); //Xóa trong database
                //Tìm đối tượng nhóm người dùng theo ID trong danh sách lấy từ cache
                glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
                NguoidungEntity oNguoidungDelete = glbLstGrvDatasource.Find
                (
                    delegate(NguoidungEntity oNguoidungByID)
                    {
                        return oNguoidungByID.PK_iNguoidungID == iPK_ID;
                    }
                );
                if (oNguoidungDelete != null)
                {
                    glbLstGrvDatasource.Remove(oNguoidungDelete); //Xóa trong danh sách
                }
                napGrvNguoidung(false);
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa người dùng " + oNguoidungDelete.sTendangnhap + " thành công!</span></p>";
            }
    }
    protected void grvNguoidung_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (ViewState["SortDirection"] == null)
            ViewState["SortDirection"] = "ASC";
        else
        {
            ViewState["SortDirection"] = ViewState["SortDirection"].ToString() == "ASC" ? "DESC" : "ASC";
        }
        //List<NguoidungEntity> lstQuyen = NguoidungBRL.GetAll();
        List<NguoidungEntity> lstQuyen = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
        glbLstGrvDatasource = NguoidungEntity.Sort(lstQuyen, e.SortExpression, ViewState["SortDirection"].ToString());
        napGrvNguoidung(false);
    }
    protected void grvNguoidung_RowDataBound(object sender, GridViewRowEventArgs e)
    {

    }
    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<NguoidungEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(NguoidungEntity oNguoidung)
            {
                return oNguoidung.sTendangnhap.ToUpper().Contains// tên đăng nhập
                (
                    strSearch.ToUpper()) ||
                    oNguoidung.sHoten.ToUpper().Contains(strSearch.ToUpper()// họ tên
                );
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(NguoidungEntity oNguoidungByID)
                {
                    return oNguoidungByID.PK_iNguoidungID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvNguoidung(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvNguoidung.DataSource = lstSearchResult;
            grvNguoidung.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        napGrvNguoidung(false);
        divThongbao.InnerHtml = "";
    }
    protected void btnOK_Click(object sender, EventArgs e)
    {
        /*
         * Khi người dùng nhấn nút OK (Thêm, sửa) sẽ thực hiện tác vụ thêm hoặc sửa
         */
        try
        {
            /* Khởi tạo đối tượng mới và gán giá trị cho đối tượng này từ các trường trong form nhập */
            NguoidungEntity oNguoidung = new NguoidungEntity();
            oNguoidung.sTendangnhap = txtTendangnhap.Text.Trim();
            oNguoidung.sMatkhau = txtMatkhau.Text.Trim();
            oNguoidung.sHoten = txtHoten.Text.Trim();
            oNguoidung.sEmail = txtEmail.Text.Trim();
            oNguoidung.sSodienthoai = txtSodienthoai.Text.Trim();
            String dngaythang = ddlNgay.Text.Trim() + "-" + ddlThang.Text.Trim() + "-" + ddlNam.Text.Trim();             
            oNguoidung.dNgaysinh = DateTime.Parse(dngaythang);          
            if (ddlGioitinh.SelectedIndex == 0)
                oNguoidung.bGioitinh = false;
            else
                oNguoidung.bGioitinh = true;
            oNguoidung.sDiachi = txtDiachi.Text.Trim();
            if (fulAnhthe.HasFile)
            {
                oNguoidung.bAnhthe = (byte[])fulAnhthe.FileBytes;
            }
            else
            {
                oNguoidung.bAnhthe = null;
            }
            oNguoidung.sGhichu = txtGhichu.Text.Trim();
            //oNguoidung.iDanhgia = 0;
            /* Kiểm tra tác vụ đang là thêm hay sửa */
            if (btnOK.CommandName == "Edit")
            {
                short iPK_ID = short.Parse(btnOK.CommandArgument);
                oNguoidung.PK_iNguoidungID = iPK_ID;


                NguoidungCustomBRL.CustomEdit(oNguoidung);  //Gọi tác vụ sửa
                btnOK.CausesValidation = true;
                /*  Hiển thị thông báo */
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Sửa tài khoản " + oNguoidung.sTendangnhap + " thành công!</span></p>";
                /* Nạp lại dữ liệu */
                panEdit.Visible = false;
                napGrvNguoidung(true);
            }
            else
            {
                /* Kiểm tra có trùng các trường */
                if (NguoidungCustomBRL.bCheckDupByTendangnhap(oNguoidung.sTendangnhap) == true)
                {

                    divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Tên đăng nhập " + oNguoidung.sTendangnhap + " đã tồn tại!</span></p>";
                }
                else
                    if (NguoidungCustomBRL.bCheckDupByEmail(oNguoidung.sEmail) == true)
                    {

                        divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Email " + oNguoidung.sEmail + " đã được sử dụng. Bạn hãy dùng địa chỉ email khác!</span></p>";
                    }
                    else
                    {
                        /* Thêm mới */
                        int iPK_ID = NguoidungBRL.Add(oNguoidung);
                        if (iPK_ID > 0)
                        {
                            divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm người dùng " + oNguoidung.sTendangnhap + " thành công!</span></p>";
                            /* Nạp lại dữ liệu */
                            panEdit.Visible = false;
                            napGrvNguoidung(true);
                        }
                    }
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void btnCancel_Click(object sender, EventArgs e)
    {
        resetForm();
        btnOK.CommandName = "Add";
        panEdit.Visible = false;
    }
    protected void lbtnAdd_Click(object sender, EventArgs e)
    {
        btnOK.CommandName = "Add";
        btnOK.Text = "<span>Thêm</span>";
        panEdit.Visible = true;
        resetForm();
        lblMatkhau.Visible = true;
        txtMatkhau.Visible = true;

        lblNhaplaiMK.Visible = true;
        txtNhaplaiMK.Visible = true;

        lblNhaplaiEmail.Visible = true;
        txtNhaplaiEmail.Visible = true;

        txtEmail.Enabled = true;
    }
    protected void lbtnDelete_Click(object sender, EventArgs e)
    {
        try
        {
            glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
            NguoidungEntity oNguoidungDelete = null;
            int iDeleteCount = 0; //Đếm số lượng bản ghi xóa thành công
            /* Lặp với mỗi hàng, tìm hàng đã chọn, tìm ra ID và xóa theo ID */
            foreach (GridViewRow row in grvNguoidung.Rows)
            {
                CheckBox chkDelete = row.FindControl("chkDelete") as CheckBox;
                Int16 iID = Convert.ToInt16(grvNguoidung.DataKeys[row.RowIndex].Values["PK_iNguoidungID"]);
                if ((chkDelete != null) && (chkDelete.Checked == true))
                {
                    NguoidungBRL.Remove(iID); //Xóa trong database
                    /* Tìm đối tượng nhóm người dùng theo ID trong danh sách */
                    oNguoidungDelete = glbLstGrvDatasource.Find
                    (
                        delegate(NguoidungEntity oNguoidungByID)
                        {
                            return oNguoidungByID.PK_iNguoidungID == iID;
                        }
                    );
                    glbLstGrvDatasource.Remove(oNguoidungDelete); //xóa trong list cache
                    ++iDeleteCount;
                }
            }
            napGrvNguoidung(false);
            if (iDeleteCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa thành công " + iDeleteCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
}